/*
 * LcsfcScheduler.h
 *
 *  Created on: 2011-04-15
 *      Author: awjastrzebski
 */

#ifndef LCFSSCHEDULER_H_
#define LCFSSCHEDULER_H_

#include <list>
#include "AbstractScheduler.h"

/**
 * Klasa implementujaca scheduler z algorytmem LCFS (Last Come, First Served).
 */
class LcfsScheduler : public AbstractScheduler
{
	/**
	 * Maksymalna dlugosc kolejki po ktorej przekroczeniu nadchodzace pakiety
	 * beda odrzucane.
	 */
	uint32_t maxQueueSize;
	/**
	 * Kolejka oczekujacych na wyslanie pakietow.
	 */
	std::list<NetPacket*> awaitingPackets;

	/**
	 * Iniciuje parametr 'maxQueueSize'.
	 */
	virtual void initialize();

	virtual bool receivePacket(NetPacket* packet, int gateNum);

	virtual bool hasPacketsAwaitingDeparture();
	virtual NetPacket* getPacketForDeparture();

	/**
	 * Informuje czy scheduler jest jeszcze w stanie przyjmowac pakiety.
	 */
	bool canReceive();
};

#endif /* LCFSSCHEDULER_H_ */
